TCL基础篇

您所在的位置:网站首页 tcl 小t小t 指令 TCL基础篇

TCL基础篇

2024-02-02 08:01| 来源: 网络整理| 查看: 265

文章目录 TCL基本入门append的用法incr的用法常见列表llength:返回一个列表的元素个数lindex :返回索引值对应的列表元素lrange:返回指定区间的列表元素lassign:将列表元素赋值给变量lappend 在原列表后面添加元素lreplace列表元素替换lset 列表元素设置linsert 在指定索引值的列表中插入新值lsort:对列表内的元素排序lreverse:反向列表 TCL控制流if命令循环命令:while、for、foreacheval命令 source -e -v提示参考文章: 从业IC的人员都知道tcl语言对于测试人员或者说设计人员都是非常重要的一门语言,为了建立更好的自动化测试环境,我们可能不仅仅是只需要了解那份执行的scripts,也可能需要知道环境里面的scripts,而里面必然涉及到一些选择语句等等,如果能把tcl的知识掌握好,然后再去做几个测试练习,最后,自己动手写几个脚本,再带着这样的思想去揣摩工作中的环境,想必能力上会有更好地提升。 tcl系列博文,将为这些能力打下一个基础前提。分为三篇: 基础篇、 练习篇、 实际项目篇。

TCL基本入门

TCL解释器对一个命令的求值分为了:分析和执行 分析:把命令分解为独立的单词,进行必要的置换动作。 执行:把第一个单词当做命令,查看这个命令是否有定义,有的话激活其对应的内部动作。

置换分了了三种: 1、变量置换 $ 2、命令置换 [ ] 3、反斜杠置换

解释:

%set x 10 %set y [expr $x + 100]

y的值是110,当TCL解释器遇到字符 【 ,它就会把随后expr作为一个命令名,从而激活expr对应的动作,如果我们去掉【 】,TCL会报错,正常情况下只把命令行中的第一个单词作为命令,注意【】中必须是一个合法的TCL脚本,长度不限。【】中的脚本的值为最后一个命令的返回值。

%set y [expr $x+100;set b 300]//y 的值为300

反斜杠置换中,在单词符号中插入换行符、空格、【、$等被TCL解释器当做特殊符号对待的字符。

双引号和花括号: TCL解释器对双引号中的各种分隔符将不做处理,但是对换行符、以及$ 和【】两种置换符会照常处理。

%set x 100 100 %set y "$x ddd" 100 ddd

在花括号中,所有特殊字符都将被成为普通字符,失去特殊意义。

%set y {/n$x [expr 10 +100]} /n$x [expr 10 +100]

数组

数组不需要声明,直接赋值即可,也不必按照顺序来: set i(1) 123 ; set i(16) hi 当然也支持任意维数的数组: set i(1,2,3) hi 引用的时候直接$i(1,2,3)即可

set与unset 一个是设置变量,一个删除变量。

append的用法

append的目的是将新的单词追加到原来旧的变量后面,而不是像set那样去替换原来这个旧的变量。

1) % set x hello hello % set y world world % set x "$x$y" helloworld 2) % set x hello hello % set y world world % append x $y helloworld

所以我们常可以看到dc里面设置search_path的时候,我们会用append,而不是用set去替换。

incr的用法

incr后面跟两个数,第一个参数为变量名,第二个参数为整数(默认为1),incr的目的就是将这个整数的值加到这个变量名的值上面,然后将结果存储到这个变量名中。 相当于a=a+number,值得一提的是不管是a还是number都必须要是整数,不可以为小数。

(1) % set a 16 16 % incr a 2 18 % incr a -5 13 % incr a 14 % incr a 011 23 % incr a 0x11 40 (2) % incr x 5 5 % incr y 1 (3) % incr x 2.3 expected integer but got "2.3" % set x 2.3 2.3 % incr x 2 expected integer but got "2.3" 解析:incr 的第一个参数必须是整数变量,第二个参数必须是整数。 常见列表

列表作为TCL中的一种重要的数据结构: 1、使用{ }创建

%set a {Hello FPGA!} Hello FPGA!

2、通过list进行创建 因为list本身就是一个TCL,因此与set一起使用的时候就要用到命令置换符【】

%set b [list Hello FPGA!] Hello FPGA!

3、通过contact命令创建列表 contact的参数可以使任意多个列表,从而实现列表的拼接

set c [contact $a $b] Hello FPGA! Hello FPGA! %set d [contact {} {b c} {d}] b c d

4、通过lrepeat命令创建列表 lrepeat命令接收两个参数,第一个参数是重复次数,第二个参数是重复值。

%set m [lrepeat 4 "**"] ** ** ** **

5、创建空的列表 空的列表不包含任何值,通常用于列表的初始化。可以通过{},也可以通过list创建空列表。

%set p {} llength $p 0 set q [list] llength $q 0

创建列表的方法有很多种,但list是最常见的。 另外上面介绍的列表除了创建一个新的列表,还有基于列表为元素的,这里我将其分开。 基于单词元素和列表元素的有: { } 、list、lrepeat 其余都是基于列表元素

list与contact的区别: concat是去掉了一层列表结构后,再组合所有的元素 在这里插入图片描述

llength:返回一个列表的元素个数

llength list 在这里插入图片描述

lindex :返回索引值对应的列表元素

元素的下标从0开始算起。如果没有index参数就返回整个列表,如果index对应的元素还是一个列表就返回对应子列表中的元素。 在这里插入图片描述

lrange:返回指定区间的列表元素 lrange list first last

返回列表list一个区间的元素,区间由first和last指定 在这里插入图片描述

lassign:将列表元素赋值给变量

在这里插入图片描述

lappend 在原列表后面添加元素

lappend命令接收一个变量名(列表名),将元素添加到原列表后面 在这里插入图片描述

lreplace列表元素替换

在这里插入图片描述

lset 列表元素设置

lset和lappend一样接收一个变量名作为参数,也会修改变量的值,将列表中的指定索引元素修改为指定的新值,如果不指定索引项就把整个列表换成新值。 在这里插入图片描述

linsert 在指定索引值的列表中插入新值

在索引位index的前面插入元素,产生一个新的列表 在这里插入图片描述

lsort:对列表内的元素排序 lsort ?options?list

在这里插入图片描述 1)按照ASCII码的顺序排序,是默认状态。

2)按照字典顺序排序。

3)按照浮点数排序,要求列表里面的元素都能够正确的转化为浮点数。

4)按照整数排序,要求列表里面的元素都能够正确转化为整数.

在这里插入图片描述 1)-increasing 按照升序排列

2)-decreasing 按照降序排列

3)-indices 返回排序后的元素在原列表中的索引

4)-nocase 忽略大小写

lreverse:反向列表

返回一个列表,新的列表为原列表的反序形式。

TCL控制流 if命令

在这里插入图片描述 注意, { 一定要写在上一行,因为如果不这样,TCL解释器会认为if命令在换行符处已结束,下一行会被当成新的命令,从而导致错误的结果。书写中还要注意一个问题是if和{之间应该还有一个空格,否则TCL解释器会把 “if{” 作为一个整体当做一个命令名,从而导致错误。

循环命令:while、for、foreach

while 在这里插入图片描述 for 在这里插入图片描述 foreach 主要功能是遍历列表中的元素。 主要用法有三种形式: 1、

% foreach var {a b c d e f} { puts $var } a b c d e f

2、 可以对列表进行多个元素一起赋值,这时varname是一个n个元素列表结构,每次遍历list列表中的n个元素赋值给以varname列表元素为名称的变量。

% foreach {var1 var2 var3} {a b c d e f} { puts "$var1 $var2 $var3" } a b c d e f

3、 遍历多个列表中的元素,这里举例以varname为单个元素为例:

% foreach var1 {a b c} var2 {d e f} { puts "$var1 $var2" } a d b e c f 如果元素不足那么会以空来补充: % foreach var1 {a b c} var2 {d e} { puts "$var1 $var2" } a d b e c

可以利用这个技巧给变量赋值,比如把一个列表中的前3个元素分别赋值给

var1、var2和var3: % foreach {var1 var2 var3} {a b c d e f} { break; } % puts "$var1 $var2 $var3" a b c

\ 仔细体会一下break的妙用吧。

eval命令

eval是调用一个TCL脚本

eval arg ?arg...?

如果是一个参数,那么相当于把这个参数当做命令来执行 如果有多个参数,eval命令会把多个参数以concat命令风格连接起来然后再执行命令。 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

source -e -v

-e代表echo -v代表verbose 好文: https://my.oschina.net/u/4579346/blog/4426952 在这里插入图片描述 -e代表echo执行了哪些cmd -v代表每一行cmd执行的结果。

https://blog.csdn.net/icxiaoge/article/details/102770805

提示

在资料中你也许经常会碰到 ?的书写方法,影响你的阅读体验 在这里插入图片描述 例如下图: 在这里插入图片描述

参考文章:

https://blog.csdn.net/long_fly/article/details/78897158?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-6&spm=1001.2101.3001.4242

http://m.elecfans.com/article/817355.html

https://blog.csdn.net/dongyanxia1000/article/details/50682376

https://blog.csdn.net/dulixin/article/details/2410015

https://blog.csdn.net/dulixin/article/details/2410030

https://my.oschina.net/u/4579346/blog/4426952

https://blog.csdn.net/icxiaoge/article/details/102770805



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3